package com.reny.ll.git.mvvm.extras

import android.app.Activity
import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.drawable.Drawable
import android.util.TypedValue
import android.view.View
import android.widget.TextView
import androidx.annotation.*
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import com.reny.ll.git.core.App

fun Any.getRDrawable(@DrawableRes drawableId:Int, context: Context? = null) : Drawable {
    return ContextCompat.getDrawable(getCtx(context), drawableId)!!
}

fun Any.getRBitmap(@DrawableRes drawableId:Int, context: Context? = null) : Bitmap {
    return BitmapFactory.decodeResource(getCtx(context).resources, drawableId)
}

fun Any.getRColor(@ColorRes colorId:Int, context: Context? = null) : Int {
    return ContextCompat.getColor(getCtx(context), colorId)
}

fun Any.getRString(@StringRes strId:Int, context: Context? = null) : String {
    return getCtx(context).getString(strId)
}

fun Any.getRInt(@IntegerRes integerId:Int, context: Context? = null):Int{
    return getCtx(context).resources.getInteger(integerId)
}

fun Any.getRIntArr(@ArrayRes arrId:Int, context: Context? = null): IntArray {
    return getCtx(context).resources.getIntArray(arrId)
}

fun Any.getRStringArr(@ArrayRes arrId:Int, context: Context? = null) : Array<String> {
    return getCtx(context).resources.getStringArray(arrId)
}

fun Any.getRDimenPx(@DimenRes dimenId: Int, context: Context? = null): Int {
    return getCtx(context).resources.getDimensionPixelSize(dimenId)
}

fun Any.getRDimenPxOff(@DimenRes dimenId: Int, context: Context? = null): Int {
    return getCtx(context).resources.getDimensionPixelOffset(dimenId)
}

fun Any.getRDimen(@DimenRes dimenId: Int, context: Context? = null): Float {
    return getCtx(context).resources.getDimension(dimenId)
}

fun Any.setRTextSize(vararg tv:TextView, size:Float){
    tv.forEach {
        it.setTextSize(TypedValue.COMPLEX_UNIT_SP, size)
    }
}

fun Any.getCtx(ctx: Context?):Context {
    if(ctx != null) return ctx
    return if(this is View){
        context
    } else if(this is Fragment){
        context ?: App.instance
    } else if(this is Activity){
        applicationContext
    } else {
        App.instance
    }
}